from fdfs_client.client import get_tracker_conf,Fdfs_client
import requests


TRCKER_CONF = 'D:\\client0.conf'
fdfs_url_total = "http://172.16.13.1:8080/"
db_address = "172.16.13.1"
#数据库端
db_port = "5002"
#数据库端口


def make_name(path:str):
    """

    根据路径获的精准的名字，目前没有太好的方案，就是从库路径获取比较好

    :param path:
    :return:
    """
    #"C:\\Users\\Admin\\Desktop\\readpst\\王彬.pst"
    lis = path.split("\\")[-1].split(".")
    name = lis[0]
    print(name)
    return name


def mk_meta_data(ret:dict,item,singal,name) -> dict :
    """

    :param ret: FDFS信息
    :param item:  邮件信息对象
    :param singal:   属于那个邮件文件夹
    :return:
    """

    # 后面只是为了做数据分析，不需要呈现，和互动，不需要管的那么细

    # 利用item去库里面查询到基本信息，然后才存到库里，去权限库理查旬，目的是为了知道一点，就是具体的信息，都是为了下一步数据分析做准备的。去库端查就行
    pst_name = name
    dic = {"username": pst_name}
    # 王倩说以后这个就是username，我就用这个来查询数据库就可以了，我可以先这么写。这个接口，还是在库端实现吧，
    # 传过去，查完，然后再传输回来。
    resp = requests.post("http://" + str(db_address) + ":" + str(db_port) + "/mysql/pst/find", json=dic)

    if resp.status_code == 200:
        data = resp.json()
        print(data)
        # todo 这里有点问题，忘了返回的是什么。
        # 传输回来的数据放在payload里面，然后从payload里面拿,这个去我哪儿的表查就行，不用去别的地方，去王倩哪里查太麻烦了。

        mysql_date = {}
        file_name = ret.get('Local file name')
        mysql_date['file_name'] = file_name.split('\\')[-1]

        # mysql_date['path'] = "http://" + ret.get("Storage IP").decode() + "/" + ret.get('Remote file_id').decode()  # 最终路径
        mysql_date['path'] = ret.get('Remote file_id').decode()
        mysql_date['file_ip'] = ret.get('Storage IP').decode()



        mysql_date['database'] = data.get('database')
        mysql_date['department_id'] = data.get('department_id') # 需要什么数据，去负载里面求出来即可。
        mysql_date['department'] = data.get('department')
        mysql_date['role'] = data.get('role')   # 没有岗位了,这里是业务
        mysql_date["role_id"] = 2  #没有岗位了，这里随便填个数字。

        mysql_date["user_id"] = data.get('user_id')
        mysql_date["user_name"] = pst_name
        mysql_date["status_id"] = singal

        return mysql_date

    else:
        mysql_date = {}

        return mysql_date


def upload_fdfs(path:str):
    """
    #上传FDFS，api
    :param path:文件的绝对路径
    :return: 上传后FDFS返回的信息
    """

    trackers = get_tracker_conf(TRCKER_CONF)
    client = Fdfs_client(trackers)
    ret = client.upload_by_filename(path)
    if ret.get('Status') == 'Upload successed.':

        return ret
    return


def upload_mydb(payload:dict,dbname:str,type,address=db_address,port=db_port):
    """
    上传mysql
    api,向数据库端发送请求，把数据打过去就行，接受数据端的返回就可以。
    :param payload:  入库所需要的数据。
    :param address: 数据库端地址。
    :param port:
    :return:
    """
    # print(payload)
    # print("http://"+ str(address) +":"+str(port)+"/db/"+ dbname + "/excel/add")

    if type == "zip":
        resp = requests.post("http://"+ str(address) +":"+str(port)+"/db/"+ dbname + "/vm_latest/add", json=payload)
    elif type == "leader":

        resp = requests.post("http://" + str(address) + ":" + str(port) + "/db/" + dbname + "/excel/add/leader", json=payload)

    elif type == "lower":
        resp = requests.post("http://" + str(address) + ":" + str(port) + "/db/" + dbname + "/excel/add/lower",
                             json=payload)

    elif type == "delete":
        resp = requests.post("http://"+ str(address) +":"+str(port)+"/db/"+ dbname + "/excel/delete", json=payload)


    else:
        resp = requests.post("http://"+ str(address) +":"+str(port)+"/db/"+ dbname + "/excel/add", json=payload)

    return resp

if __name__ == "__main__":
    path = "C:\\Users\\Admin\\Desktop\\readpst\\测试放大.pst"
    make_name(path)

    # ret = upload_fdfs("D:\\client2.conf")
    # print(ret)
